/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.going.vista;

import co.com.going.logica.ILogicaCiudad;
import co.com.going.logica.ILogicaCliente;
import co.com.going.logica.ILogicaEscuela;
import co.com.going.logica.ILogicaPais;
import co.com.going.logica.ILogicaPrograma;
import co.com.going.logica.ILogicaSolicitud;
import co.com.going.modelo.Ciudad;
import co.com.going.modelo.Cliente;
import co.com.going.modelo.Escuela;
import co.com.going.modelo.Pais;
import co.com.going.modelo.Programa;
import co.com.going.modelo.Solicitud;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Olguita
 */
@ManagedBean(name = "VistaCliente")
@ViewScoped
public class VistaCliente {

    @EJB
    private ILogicaSolicitud iLogicaSolicitud;
    @EJB
    private ILogicaCliente iLogicaCliente;
    @EJB
    private ILogicaCiudad iLogicaCiudad;
    @EJB
    private ILogicaPrograma iLogicaPrograma;
    @EJB
    private ILogicaEscuela iLogicaEscuela;
    @EJB
    private ILogicaPais iLogicaPais;

    private InputText txtCedula;
    private InputText txtNombre;
    private InputText txtApellido;
    private InputText txtCelular;
    private InputText txtEmail;
    private SelectOneMenu cmbNivelInteres;
    private InputText txtOcupacion;
    private ArrayList<SelectItem> ciudadOrigen;
    private SelectOneMenu cmbCiudadOrigen;
    private InputText UniColEmp;
    private InputTextarea Comentarios;
    private SelectOneMenu cmbDuracion;
    private Calendar FechaViaje;
    private ArrayList<SelectItem> paises;
    private SelectOneMenu cmbPais;
    private ArrayList<SelectItem> ciudades;
    private SelectOneMenu cmbCiudad;
    private ArrayList<SelectItem> escuelas;
    private SelectOneMenu cmbEscuela;
    private ArrayList<SelectItem> programas;
    private SelectOneMenu cmbPrograma;
    private List<Solicitud> listaSoliciudes;
    private Solicitud solicitudSeleccionada;
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;

    public VistaCliente() {
    }

    public ILogicaSolicitud getiLogicaSolicitud() {
        return iLogicaSolicitud;
    }

    public void setiLogicaSolicitud(ILogicaSolicitud iLogicaSolicitud) {
        this.iLogicaSolicitud = iLogicaSolicitud;
    }

    public ILogicaCliente getiLogicaCliente() {
        return iLogicaCliente;
    }

    public void setiLogicaCliente(ILogicaCliente iLogicaCliente) {
        this.iLogicaCliente = iLogicaCliente;
    }

    public ILogicaCiudad getiLogicaCiudad() {
        return iLogicaCiudad;
    }

    public void setiLogicaCiudad(ILogicaCiudad iLogicaCiudad) {
        this.iLogicaCiudad = iLogicaCiudad;
    }

    public ILogicaPrograma getiLogicaPrograma() {
        return iLogicaPrograma;
    }

    public ILogicaPais getiLogicaPais() {
        return iLogicaPais;
    }

    public void setiLogicaPais(ILogicaPais iLogicaPais) {
        this.iLogicaPais = iLogicaPais;
    }

    public void setiLogicaPrograma(ILogicaPrograma iLogicaPrograma) {
        this.iLogicaPrograma = iLogicaPrograma;
    }

    public ILogicaEscuela getiLogicaEscuela() {
        return iLogicaEscuela;
    }

    public void setiLogicaEscuela(ILogicaEscuela iLogicaEscuela) {
        this.iLogicaEscuela = iLogicaEscuela;
    }

    public InputText getTxtCedula() {
        return txtCedula;
    }

    public void setTxtCedula(InputText txtCedula) {
        this.txtCedula = txtCedula;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public InputText getTxtApellido() {
        return txtApellido;
    }

    public void setTxtApellido(InputText txtApellido) {
        this.txtApellido = txtApellido;
    }

    public InputText getTxtCelular() {
        return txtCelular;
    }

    public void setTxtCelular(InputText txtCelular) {
        this.txtCelular = txtCelular;
    }

    public InputText getTxtEmail() {
        return txtEmail;
    }

    public void setTxtEmail(InputText txtEmail) {
        this.txtEmail = txtEmail;
    }

    public SelectOneMenu getCmbNivelInteres() {
        return cmbNivelInteres;
    }

    public void setCmbNivelInteres(SelectOneMenu cmbNivelInteres) {
        this.cmbNivelInteres = cmbNivelInteres;
    }

    public InputText getTxtOcupacion() {
        return txtOcupacion;
    }

    public void setTxtOcupacion(InputText txtOcupacion) {
        this.txtOcupacion = txtOcupacion;
    }

    public ArrayList<SelectItem> getCiudadOrigen() {

        if (ciudadOrigen == null) {

            try {
                ciudadOrigen = new ArrayList<>();
                List<Ciudad> lista = iLogicaCiudad.CiudadesOrigen();

                for (int i = 0; i < lista.size(); i++) {

                    ciudadOrigen.add(new SelectItem(lista.get(i).getCodCiudad(), lista.get(i).getNombreCiudad()));

                }

            } catch (Exception ex) {
                Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

        return ciudadOrigen;
    }

    public void setCiudadOrigen(ArrayList<SelectItem> ciudadOrigen) {
        this.ciudadOrigen = ciudadOrigen;
    }

    public SelectOneMenu getCmbCiudadOrigen() {
        return cmbCiudadOrigen;
    }

    public void setCmbCiudadOrigen(SelectOneMenu cmbCiudadOrigen) {
        this.cmbCiudadOrigen = cmbCiudadOrigen;
    }

    public InputText getUniColEmp() {
        return UniColEmp;
    }

    public void setUniColEmp(InputText UniColEmp) {
        this.UniColEmp = UniColEmp;
    }

    public InputTextarea getComentarios() {
        return Comentarios;
    }

    public void setComentarios(InputTextarea Comentarios) {
        this.Comentarios = Comentarios;
    }

    public SelectOneMenu getCmbDuracion() {
        return cmbDuracion;
    }

    public void setCmbDuracion(SelectOneMenu cmbDuracion) {
        this.cmbDuracion = cmbDuracion;
    }

    public Calendar getFechaViaje() {
        return FechaViaje;
    }

    public void setFechaViaje(Calendar FechaViaje) {
        this.FechaViaje = FechaViaje;
    }

    public ArrayList<SelectItem> getPaises() {

        if (paises == null) {
            
            escuelas=null;

            try {
                paises = new ArrayList<>();
                List<Pais> lista = iLogicaPais.PaisesCBM();

                for (int i = 0; i < lista.size(); i++) {

                    paises.add(new SelectItem(lista.get(i).getCodPais(), lista.get(i).getNombrePais()));

                }

            } catch (Exception ex) {
                Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

        return paises;

    }

    public void setPaises(ArrayList<SelectItem> paises) {
        this.paises = paises;
    }

    public SelectOneMenu getCmbPais() {
        return cmbPais;
    }

    public void setCmbPais(SelectOneMenu cmbPais) {
        this.cmbPais = cmbPais;
    }

    public ArrayList<SelectItem> getCiudades() {
        return ciudades;
    }

    public void setCiudades(ArrayList<SelectItem> ciudades) {
        this.ciudades = ciudades;
    }

    public SelectOneMenu getCmbCiudad() {
        return cmbCiudad;
    }

    public void setCmbCiudad(SelectOneMenu cmbCiudad) {
        this.cmbCiudad = cmbCiudad;
    }

    public ArrayList<SelectItem> getEscuelas() {
            return escuelas;
    }

    public void setEscuelas(ArrayList<SelectItem> escuelas) {
        this.escuelas = escuelas;
    }

    public SelectOneMenu getCmbEscuela() {
        return cmbEscuela;
    }

    public void setCmbEscuela(SelectOneMenu cmbEscuela) {
        this.cmbEscuela = cmbEscuela;
    }

    public ArrayList<SelectItem> getProgramas() {

        if (programas == null) {

            try {
                programas = new ArrayList<>();
                List<Programa> lista = iLogicaPrograma.programas();

                for (int i = 0; i < lista.size(); i++) {

                    programas.add(new SelectItem(lista.get(i).getCodPrograma(), lista.get(i).getNombrePrograma()));

                }

            } catch (Exception ex) {
                Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

        return programas;

    }

    public void setProgramas(ArrayList<SelectItem> programas) {
        this.programas = programas;
    }

    public SelectOneMenu getCmbPrograma() {
        return cmbPrograma;
    }

    public void setCmbPrograma(SelectOneMenu cmbPrograma) {
        this.cmbPrograma = cmbPrograma;
    }

    public List<Solicitud> getListaSoliciudes() {

        try {
            listaSoliciudes = iLogicaSolicitud.Solicitudes();

        } catch (Exception ex) {
            Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaSoliciudes;
    }

    public void setListaSoliciudes(List<Solicitud> listaSoliciudes) {
        this.listaSoliciudes = listaSoliciudes;
    }

    public Solicitud getSolicitudSeleccionada() {
        return solicitudSeleccionada;
    }

    public void setSolicitudSeleccionada(Solicitud solicitudSeleccionada) {
        this.solicitudSeleccionada = solicitudSeleccionada;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public void seleccionaPais() {
    ciudades=null;
    escuelas=null;
            try {
                ciudades = new ArrayList<>();
                Pais pais = iLogicaPais.buscarPaisPorId(Long.parseLong(cmbPais.getValue().toString()));
                List<Ciudad> lista = pais.getCiudadList();

                for (int i = 0; i < lista.size(); i++) {

                    ciudades.add(new SelectItem(lista.get(i).getCodCiudad(), lista.get(i).getNombreCiudad()));

                }

            } catch (Exception ex) {
                Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            }

        
        }

        public void seleccionaCiudad() {
            
        escuelas = null;
        try {
            escuelas = new ArrayList<>();
            Ciudad ciudad = iLogicaCiudad.buscarPorId(Long.parseLong(cmbCiudad.getValue().toString()));
            List<Escuela> lista2 = ciudad.getEscuelaList();

            for (int i = 0; i < lista2.size(); i++) {

                escuelas.add(new SelectItem(lista2.get(i).getCodEscuela(), lista2.get(i).getNombreEscuela()));

            }

        } catch (Exception ex) {
            Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
            
    }

    public void seleccionar_Solucitud(SelectEvent event) {

        Solicitud solicitud = (Solicitud) event.getObject();
        txtCedula.setValue(solicitud.getCedulaSolicitud().getCedula());
        txtNombre.setValue(solicitud.getCedulaSolicitud().getNombreCliente());
        txtApellido.setValue(solicitud.getCedulaSolicitud().getApellidoCliente());
        txtCelular.setValue(solicitud.getCedulaSolicitud().getCelular());
        txtEmail.setValue(solicitud.getCedulaSolicitud().getEmail());
        txtOcupacion.setValue(solicitud.getCedulaSolicitud().getOcupacion());
        UniColEmp.setValue(solicitud.getCedulaSolicitud().getUniColEmp());
        cmbCiudadOrigen.setValue(solicitud.getCedulaSolicitud().getCiudadOrigen().getCodCiudad());
        cmbPais.setValue(solicitud.getCodEscuelaSolicitud().getCodCiudadEscuela().getCodPaisCiudad().getCodPais());
        cmbCiudad.setValue(solicitud.getCodEscuelaSolicitud().getCodCiudadEscuela().getCodCiudad());
        cmbEscuela.setValue(solicitud.getCodEscuelaSolicitud().getCodEscuela());
        cmbPrograma.setValue(solicitud.getCodProgramaSolicitud().getCodPrograma());
        cmbDuracion.setValue(solicitud.getDuracion());
        FechaViaje.setValue(solicitud.getFechaEstimada());
        Comentarios.setValue(solicitud.getCedulaSolicitud().getComentarios());
        cmbNivelInteres.setValue(solicitud.getCedulaSolicitud().getNivelIn());
        txtCedula.setDisabled(true);
        btnEliminar.setDisabled(false);
        btnLimpiar.setDisabled(false);
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);

    }

    public void funcion_Registrar() {
        System.out.println("REISTRAR CLIENTE SOLICITUD");
        try {
            Cliente cliente = new Cliente();
            Solicitud solicitud = new Solicitud();
            
            cliente.setCedula(Long.parseLong(txtCedula.getValue().toString().trim()));
            cliente.setNombreCliente(txtNombre.getValue().toString().trim().toUpperCase());
            cliente.setApellidoCliente(txtApellido.getValue().toString().trim().toUpperCase());
            cliente.setCelular(txtCelular.getValue().toString().trim());
            cliente.setEmail(txtEmail.getValue().toString().trim().toLowerCase());
            cliente.setOcupacion(txtOcupacion.getValue().toString().trim().toUpperCase());
            cliente.setUniColEmp(UniColEmp.getValue().toString().trim().toUpperCase());
            if(!(cmbCiudadOrigen.getValue().toString().equals(""))){
            Ciudad ciudad = iLogicaCiudad.buscarPorId(Long.parseLong(cmbCiudadOrigen.getValue().toString()));
            cliente.setCiudadOrigen(ciudad);
            }
            cliente.setNivelIn(cmbCiudad.getValue().toString().trim());
            cliente.setComentarios(Comentarios.getValue().toString().trim().toUpperCase());
            iLogicaCliente.crearCliente(cliente);
            System.out.println("Crearcliente");
            solicitud.setDuracion(cmbDuracion.getValue().toString());
            Date fechaA = new Date();
            solicitud.setFecha(fechaA);
            solicitud.setFechaEstimada((Date) FechaViaje.getValue());
            Programa programa = iLogicaPrograma.BuscarProgramaPorId(Long.parseLong(cmbPrograma.getValue().toString()));
            solicitud.setCodProgramaSolicitud(programa);
            Escuela escuela = iLogicaEscuela.buscarEscuelaPorID(Long.parseLong(cmbEscuela.getValue().toString()));
            solicitud.setCodEscuelaSolicitud(escuela);
            solicitud.setCedulaSolicitud(cliente);
            iLogicaSolicitud.crearSolicitud(solicitud);

            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El Cliente fue Agregado con Exito"));
            funcion_Limpiar();

        } catch (Exception ex) {
            Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }

    }

    public void funcion_Modificar() {

        try {
            Cliente cliente = new Cliente();
            Solicitud solicitud = new Solicitud();
            cliente.setCedula(Long.parseLong(txtCedula.getValue().toString().trim()));
            cliente.setNombreCliente(txtNombre.getValue().toString().trim().toUpperCase());
            cliente.setApellidoCliente(txtApellido.getValue().toString().trim().toUpperCase());
            cliente.setCelular(txtCelular.getValue().toString().trim());
            cliente.setEmail(txtEmail.getValue().toString().trim().toLowerCase());
            cliente.setOcupacion(txtOcupacion.getValue().toString().trim().toUpperCase());
            cliente.setUniColEmp(UniColEmp.getValue().toString().trim().toUpperCase());
            Ciudad ciudad = iLogicaCiudad.buscarPorId(Long.parseLong(cmbCiudadOrigen.getValue().toString()));
            cliente.setCiudadOrigen(ciudad);
            cliente.setNivelIn(cmbCiudad.getValue().toString().trim());
            cliente.setComentarios(Comentarios.getValue().toString().trim().toUpperCase());
            iLogicaCliente.modificarCliente(cliente);
            solicitud.setDuracion(cmbDuracion.getValue().toString());
            solicitud.setFechaEstimada((Date)FechaViaje.getValue());
            Programa programa = iLogicaPrograma.BuscarProgramaPorId(Long.parseLong(cmbPrograma.getValue().toString()));
            solicitud.setCodProgramaSolicitud(programa);
            Escuela escuela = iLogicaEscuela.buscarEscuelaPorID(Long.parseLong(cmbEscuela.getValue().toString()));
            solicitud.setCodEscuelaSolicitud(escuela);
            solicitud.setCedulaSolicitud(cliente);
            iLogicaSolicitud.modificarSolicitud(solicitud);

            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El Cliente Registrado con Exito"));
            funcion_Limpiar();

        } catch (Exception ex) {
            Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }

    }

    public void funcion_Eliminar() {

        try {

            Cliente cliente = iLogicaCliente.buscarCliente(Long.parseLong(txtCedula.getValue().toString()));
            iLogicaCliente.eliminarCliente(cliente);
            
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El Cliente Fue Eliminado con Exito"));
            funcion_Limpiar();

        } catch (Exception ex) {
            Logger.getLogger(VistaCliente.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }

    }

    public void funcion_Limpiar() {

        txtCedula.setValue("");
        txtNombre.setValue("");
        txtApellido.setValue("");
        txtCelular.setValue("");
        txtEmail.setValue("");
        txtOcupacion.setValue("");
        UniColEmp.setValue("");
        cmbCiudadOrigen.setValue("");
        cmbPais.setValue("");
        cmbCiudad.setValue("");
        cmbEscuela.setValue("");
        cmbPrograma.setValue("");
        cmbDuracion.setValue("");
        FechaViaje.setValue(null);
        Comentarios.setValue("");
        cmbNivelInteres.setValue("");
        txtCedula.setDisabled(false);
        btnEliminar.setDisabled(true);
        btnLimpiar.setDisabled(true);
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);

    }

}
